package exception;

/**
 * 异常处理机制中try-catch
 * 语法:
 * try{
 *     可能出现异常的代码片段
 * }catch(XXXException e){
 *     try中出现XXXException后出的处理手段
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始...");
        /*
        异常处理机制是关心那些程序运行时明知会发生,但是无法通过逻辑完全避免的问题
        这时候我们通过异常处理机制事先写好一旦发生该情况时的解决办法,避免程序中断
        能通过逻辑避免的问题都属于bug!不应该用异常处理机制来解决,比如空指针异常!
         */
        try {
            //         String str = null;
 //           String str = "";
            String str="a";

            //JVM执行到某句话若出现了异常则会实例化该异常并将其抛出
            System.out.println(str.length());//抛出一个空指针异常实例

            System.out.println(str.charAt(0));

            System.out.println(Integer.parseInt(str));

            /*
            try语句块中出现异常的语句之后的内容都不会在执行.
            */
            System.out.println("!!!!!!!!!!!!!!!!!!!!!!!");

//        }catch (NullPointerException e){
//            System.out.println("出现了空指针并解决了!");
//            //catch可以定义多个,当try中出现多个无法避免的异常时,可以分别捕获并处理
//        }catch (StringIndexOutOfBoundsException e){
//            System.out.println("出现了下标越界错误!并解决了!");
//        }

            //当出现了多种异常,但是处理方式相同时,可以使用一个catch来解决
        }catch (NullPointerException | StringIndexOutOfBoundsException e){
            System.out.println("出现了空指针或下标越界的解决办法");
            //可以在最后一个catch处捕获Exception,避免因为意想不到的异常抛出导致程序中断
        }catch (Exception e){
            System.out.println("反正就是出了个异常");
        }
        System.out.println("程序结束....");
    }
}
